package springboot.file.demo.util;


/**
 * 文件类型检测工具类
 */
public class FileTypeDetect {

    public static final String TYPE_JPEG = "jpeg";

    public static final String TYPE_JPG = "jpg";

    public static final String TYPE_PNG = "png";

    public static final String TYPE_BMP = "bmp";


    /**
     *  pdf文件头部特征
     */
    private static String pdfHead = "255044462D312E";

    /**
     * png文件头部特征
     */
    private static String pngHead = "89504E470D0A1A";

    /**
     * jpg文件头部特征
     */
    private static String jpgHead = "FFD8FFE000104A";

    /**
     * jpeg文件头部特征
     */
    private static String jpegHead = "FFD8FFE1";



    /**
     * 检测是否是指定文件
     * @param pdfHead 要检测文件的头部数据
     * @param fileByteArray 文件数据
     * @return 是否是指定文件
     */
    public static Boolean isFile(String pdfHead, byte[] fileByteArray) {
        int checkLength = 8; //检测字节数
        if(fileByteArray.length > checkLength) {
            StringBuilder sb = new StringBuilder();
            for(int i = 0;i < checkLength; i ++){
                int v = fileByteArray[i] & 0xFF;
                String hv = Integer.toHexString(v);
                if (hv.length() < 2) {
                    sb.append(00);
                }
                sb.append(hv);
            }

            String uploadFileHead = sb.toString().toUpperCase();
            if(!uploadFileHead.startsWith(pdfHead)) {
                return false;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * 检测是不是PDF文件
     * @param fileByteArray 文件数据
     * @return 是否是PDF文件
     */
    public static Boolean isPdfFile(byte[] fileByteArray) {
        return isFile(pdfHead, fileByteArray);
    }

    /**
     * 检测是否是pngjpg,jpeg格式文件
     * @param fileByteArray 文件数据
     * @return 是否是pngjpg,jpeg格式文件
     */
    public static Boolean isRightPic(byte[] fileByteArray) {
        return (isFile(pngHead, fileByteArray)|| isFile(jpgHead, fileByteArray)
                || isFile(jpegHead, fileByteArray));
    }
}
